'\" t
.\"     Title: gitprotocol-http
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
.\"      Date: 2025-08-21
.\"    Manual: Git Manual
.\"    Source: Git 2.51.0.68.g954d33a975
.\"  Language: English
.\"
.TH "GITPROTOCOL\-HTTP" "5" "2025-08-21" "Git 2\&.51\&.0\&.68\&.g954d33a" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
gitprotocol-http \- Git HTTP\-based protocols
.SH "SYNOPSIS"
.sp
.nf
<over\-the\-wire\-protocol>
.fi
.SH "DESCRIPTION"
.sp
Git supports two HTTP based transfer protocols\&. A "dumb" protocol which requires only a standard HTTP server on the server end of the connection, and a "smart" protocol which requires a Git aware CGI (or server module)\&. This document describes both protocols\&.
.sp
As a design feature smart clients can automatically upgrade "dumb" protocol URLs to smart URLs\&. This permits all users to have the same published URL, and the peers automatically select the most efficient transport available to them\&.
.SH "URL FORMAT"
.sp
URLs for Git repositories accessed by HTTP use the standard HTTP URL syntax documented by RFC 1738, so they are of the form:
.sp
.if n \{\
.RS 4
.\}
.nf
http://<host>:<port>/<path>?<searchpart>
.fi
.if n \{\
.RE
.\}
.sp
Within this documentation the placeholder \fB$GIT_URL\fR will stand for the http:// repository URL entered by the end\-user\&.
.sp
Servers SHOULD handle all requests to locations matching \fB$GIT_URL\fR, as both the "smart" and "dumb" HTTP protocols used by Git operate by appending additional path components onto the end of the user supplied \fB$GIT_URL\fR string\&.
.sp
An example of a dumb client requesting a loose object:
.sp
.if n \{\
.RS 4
.\}
.nf
$GIT_URL:     http://example\&.com:8080/git/repo\&.git
URL request:  http://example\&.com:8080/git/repo\&.git/objects/d0/49f6c27a2244e12041955e262a404c7faba355
.fi
.if n \{\
.RE
.\}
.sp
An example of a smart request to a catch\-all gateway:
.sp
.if n \{\
.RS 4
.\}
.nf
$GIT_URL:     http://example\&.com/daemon\&.cgi?svc=git&q=
URL request:  http://example\&.com/daemon\&.cgi?svc=git&q=/info/refs&service=git\-receive\-pack
.fi
.if n \{\
.RE
.\}
.sp
An example of a request to a submodule:
.sp
.if n \{\
.RS 4
.\}
.nf
$GIT_URL:     http://example\&.com/git/repo\&.git/path/submodule\&.git
URL request:  http://example\&.com/git/repo\&.git/path/submodule\&.git/info/refs
.fi
.if n \{\
.RE
.\}
.sp
Clients MUST strip a trailing \fB/\fR, if present, from the user supplied \fB$GIT_URL\fR string to prevent empty path tokens (\fB//\fR) from appearing in any URL sent to a server\&. Compatible clients MUST expand \fB$GIT_URL/info/refs\fR as \fBfoo/info/refs\fR and not \fBfoo//info/refs\fR\&.
.SH "AUTHENTICATION"
.sp
Standard HTTP authentication is used if authentication is required to access a repository, and MAY be configured and enforced by the HTTP server software\&.
.sp
Because Git repositories are accessed by standard path components server administrators MAY use directory based permissions within their HTTP server to control repository access\&.
.sp
Clients SHOULD support Basic authentication as described by RFC 2617\&. Servers SHOULD support Basic authentication by relying upon the HTTP server placed in front of the Git server software\&.
.sp
Servers SHOULD NOT require HTTP cookies for the purposes of authentication or access control\&.
.sp
Clients and servers MAY support other common forms of HTTP based authentication, such as Digest authentication\&.
.SH "SSL"
.sp
Clients and servers SHOULD support SSL, particularly to protect passwords when relying on Basic HTTP authentication\&.
.SH "SESSION STATE"
.sp
The Git over HTTP protocol (much like HTTP itself) is stateless from the perspective of the HTTP server side\&. All state MUST be retained and managed by the client process\&. This permits simple round\-robin load\-balancing on the server side, without needing to worry about state management\&.
.sp
Clients MUST NOT require state management on the server side in order to function correctly\&.
.sp
Servers MUST NOT require HTTP cookies in order to function correctly\&. Clients MAY store and forward HTTP cookies during request processing as described by RFC 2616 (HTTP/1\&.1)\&. Servers SHOULD ignore any cookies sent by a client\&.
.SH "GENERAL REQUEST PROCESSING"
.sp
Except where noted, all standard HTTP behavior SHOULD be assumed by both client and server\&. This includes (but is not necessarily limited to):
.sp
If there is no repository at \fB$GIT_URL\fR, or the resource pointed to by a location matching \fB$GIT_URL\fR does not exist, the server MUST NOT respond with \fB200\fR \fBOK\fR response\&. A server SHOULD respond with \fB404\fR \fBNot\fR \fBFound\fR, \fB410\fR \fBGone\fR, or any other suitable HTTP status code which does not imply the resource exists as requested\&.
.sp
If there is a repository at \fB$GIT_URL\fR, but access is not currently permitted, the server MUST respond with the \fB403\fR \fBForbidden\fR HTTP status code\&.
.sp
Servers SHOULD support both HTTP 1\&.0 and HTTP 1\&.1\&. Servers SHOULD support chunked encoding for both request and response bodies\&.
.sp
Clients SHOULD support both HTTP 1\&.0 and HTTP 1\&.1\&. Clients SHOULD support chunked encoding for both request and response bodies\&.
.sp
Servers MAY return ETag and/or Last\-Modified headers\&.
.sp
Clients MAY revalidate cached entities by including If\-Modified\-Since and/or If\-None\-Match request headers\&.
.sp
Servers MAY return \fB304\fR \fBNot\fR \fBModified\fR if the relevant headers appear in the request and the entity has not changed\&. Clients MUST treat \fB304\fR \fBNot\fR \fBModified\fR identical to \fB200\fR \fBOK\fR by reusing the cached entity\&.
.sp
Clients MAY reuse a cached entity without revalidation if the Cache\-Control and/or Expires header permits caching\&. Clients and servers MUST follow RFC 2616 for cache controls\&.
.SH "DISCOVERING REFERENCES"
.sp
All HTTP clients MUST begin either a fetch or a push exchange by discovering the references available on the remote repository\&.
.SS "Dumb Clients"
.sp
HTTP clients that only support the "dumb" protocol MUST discover references by making a request for the special info/refs file of the repository\&.
.sp
Dumb HTTP clients MUST make a \fBGET\fR request to \fB$GIT_URL/info/refs\fR, without any search/query parameters\&.
.sp
.if n \{\
.RS 4
.\}
.nf
C: GET $GIT_URL/info/refs HTTP/1\&.0
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
S: 200 OK
S:
S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31	refs/heads/maint
S: d049f6c27a2244e12041955e262a404c7faba355	refs/heads/master
S: 2cb58b79488a98d2721cea644875a8dd0026b115	refs/tags/v1\&.0
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c	refs/tags/v1\&.0^{}
.fi
.if n \{\
.RE
.\}
.sp
The Content\-Type of the returned info/refs entity SHOULD be \fBtext/plain\fR; \fBcharset=utf\-8\fR, but MAY be any content type\&. Clients MUST NOT attempt to validate the returned Content\-Type\&. Dumb servers MUST NOT return a return type starting with \fBapplication/x\-git\-\fR\&.
.sp
Cache\-Control headers MAY be returned to disable caching of the returned entity\&.
.sp
When examining the response clients SHOULD only examine the HTTP status code\&. Valid responses are \fB200\fR \fBOK\fR, or \fB304\fR \fBNot\fR \fBModified\fR\&.
.sp
The returned content is a UNIX formatted text file describing each ref and its known value\&. The file SHOULD be sorted by name according to the C locale ordering\&. The file SHOULD NOT include the default ref named \fBHEAD\fR\&.
.sp
.if n \{\
.RS 4
.\}
.nf
info_refs   =  *( ref_record )
ref_record  =  any_ref / peeled_ref
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
any_ref     =  obj\-id HTAB refname LF
peeled_ref  =  obj\-id HTAB refname LF
 obj\-id HTAB refname "^{}" LF
.fi
.if n \{\
.RE
.\}
.SS "Smart Clients"
.sp
HTTP clients that support the "smart" protocol (or both the "smart" and "dumb" protocols) MUST discover references by making a parameterized request for the info/refs file of the repository\&.
.sp
The request MUST contain exactly one query parameter, \fBservice=$servicename\fR, where \fB$servicename\fR MUST be the service name the client wishes to contact to complete the operation\&. The request MUST NOT contain additional query parameters\&.
.sp
.if n \{\
.RS 4
.\}
.nf
C: GET $GIT_URL/info/refs?service=git\-upload\-pack HTTP/1\&.0
.fi
.if n \{\
.RE
.\}
.sp
dumb server reply:
.sp
.if n \{\
.RS 4
.\}
.nf
S: 200 OK
S:
S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31	refs/heads/maint
S: d049f6c27a2244e12041955e262a404c7faba355	refs/heads/master
S: 2cb58b79488a98d2721cea644875a8dd0026b115	refs/tags/v1\&.0
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c	refs/tags/v1\&.0^{}
.fi
.if n \{\
.RE
.\}
.sp
smart server reply:
.sp
.if n \{\
.RS 4
.\}
.nf
S: 200 OK
S: Content\-Type: application/x\-git\-upload\-pack\-advertisement
S: Cache\-Control: no\-cache
S:
S: 001e# service=git\-upload\-pack\en
S: 0000
S: 004895dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint\e0multi_ack\en
S: 003fd049f6c27a2244e12041955e262a404c7faba355 refs/heads/master\en
S: 003c2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1\&.0\en
S: 003fa3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1\&.0^{}\en
S: 0000
.fi
.if n \{\
.RE
.\}
.sp
The client may send Extra Parameters (see \fBgitprotocol-pack\fR(5)) as a colon\-separated string in the Git\-Protocol HTTP header\&.
.sp
Uses the \fB\-\-http\-backend\-info\-refs\fR option to \fBgit-upload-pack\fR(1)\&.
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBDumb Server Response\fR
.RS 4
.sp
Dumb servers MUST respond with the dumb server reply format\&.
.sp
See the prior section under dumb clients for a more detailed description of the dumb server response\&.
.RE
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBSmart Server Response\fR
.RS 4
.sp
If the server does not recognize the requested service name, or the requested service name has been disabled by the server administrator, the server MUST respond with the \fB403\fR \fBForbidden\fR HTTP status code\&.
.sp
Otherwise, smart servers MUST respond with the smart server reply format for the requested service name\&.
.sp
Cache\-Control headers SHOULD be used to disable caching of the returned entity\&.
.sp
The Content\-Type MUST be \fBapplication/x\-$servicename\-advertisement\fR\&. Clients SHOULD fall back to the dumb protocol if another content type is returned\&. When falling back to the dumb protocol clients SHOULD NOT make an additional request to \fB$GIT_URL/info/refs\fR, but instead SHOULD use the response already in hand\&. Clients MUST NOT continue if they do not support the dumb protocol\&.
.sp
Clients MUST validate the status code is either \fB200\fR \fBOK\fR or \fB304\fR \fBNot\fR \fBModified\fR\&.
.sp
Clients MUST validate the first five bytes of the response entity matches the regex \fB^\fR[\fB0\-9a\-f\fR]{4}#\&. If this test fails, clients MUST NOT continue\&.
.sp
Clients MUST parse the entire response as a sequence of pkt\-line records\&.
.sp
Clients MUST verify the first pkt\-line is # \fBservice=$servicename\fR\&. Servers MUST set $servicename to be the request parameter value\&. Servers SHOULD include an LF at the end of this line\&. Clients MUST ignore an LF at the end of the line\&.
.sp
Servers MUST terminate the response with the magic \fB0000\fR end pkt\-line marker\&.
.sp
The returned response is a pkt\-line stream describing each ref and its known value\&. The stream SHOULD be sorted by name according to the C locale ordering\&. The stream SHOULD include the default ref named \fBHEAD\fR as the first ref\&. The stream MUST include capability declarations behind a NUL on the first ref\&.
.sp
The returned response contains "version 1" if "version=1" was sent as an Extra Parameter\&.
.sp
.if n \{\
.RS 4
.\}
.nf
smart_reply     =  PKT\-LINE("# service=$servicename" LF)
     "0000"
     *1("version 1")
     ref_list
     "0000"
ref_list        =  empty_list / non_empty_list
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
empty_list      =  PKT\-LINE(zero\-id SP "capabilities^{}" NUL cap\-list LF)
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
non_empty_list  =  PKT\-LINE(obj\-id SP name NUL cap_list LF)
     *ref_record
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
cap\-list        =  capability *(SP capability)
capability      =  1*(LC_ALPHA / DIGIT / "\-" / "_")
LC_ALPHA        =  %x61\-7A
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
ref_record      =  any_ref / peeled_ref
any_ref         =  PKT\-LINE(obj\-id SP name LF)
peeled_ref      =  PKT\-LINE(obj\-id SP name LF)
     PKT\-LINE(obj\-id SP name "^{}" LF
.fi
.if n \{\
.RE
.\}
.RE
.SH "SMART SERVICE GIT\-UPLOAD\-PACK"
.sp
This service reads from the repository pointed to by \fB$GIT_URL\fR\&.
.sp
Clients MUST first perform ref discovery with \fB$GIT_URL/info/refs\fR?service=git\-upload\-pack\&.
.sp
.if n \{\
.RS 4
.\}
.nf
C: POST $GIT_URL/git\-upload\-pack HTTP/1\&.0
C: Content\-Type: application/x\-git\-upload\-pack\-request
C:
C: 0032want 0a53e9ddeaddad63ad106860237bbf53411d11a7\en
C: 0032have 441b40d833fdfa93eb2908e52742248faf0ee993\en
C: 0000
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
S: 200 OK
S: Content\-Type: application/x\-git\-upload\-pack\-result
S: Cache\-Control: no\-cache
S:
S: \&.\&.\&.\&.ACK %s, continue
S: \&.\&.\&.\&.NAK
.fi
.if n \{\
.RE
.\}
.sp
Clients MUST NOT reuse or revalidate a cached response\&. Servers MUST include sufficient Cache\-Control headers to prevent caching of the response\&.
.sp
Servers SHOULD support all capabilities defined here\&.
.sp
Clients MUST send at least one "want" command in the request body\&. Clients MUST NOT reference an id in a "want" command which did not appear in the response obtained through ref discovery unless the server advertises capability \fBallow\-tip\-sha1\-in\-want\fR or \fBallow\-reachable\-sha1\-in\-want\fR\&.
.sp
.if n \{\
.RS 4
.\}
.nf
compute_request   =  want_list
       have_list
       request_end
request_end       =  "0000" / "done"
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
want_list         =  PKT\-LINE(want SP cap_list LF)
       *(want_pkt)
want_pkt          =  PKT\-LINE(want LF)
want              =  "want" SP id
cap_list          =  capability *(SP capability)
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
have_list         =  *PKT\-LINE("have" SP id LF)
.fi
.if n \{\
.RE
.\}
.sp
TODO: Document this further\&.
.SS "The Negotiation Algorithm"
.sp
The computation to select the minimal pack proceeds as follows (C = client, S = server):
.sp
\fIinit step:\fR
.sp
C: Use ref discovery to obtain the advertised refs\&.
.sp
C: Place any object seen into set \fBadvertised\fR\&.
.sp
C: Build an empty set, \fBcommon\fR, to hold the objects that are later determined to be on both ends\&.
.sp
C: Build a set, \fBwant\fR, of the objects from \fBadvertised\fR that the client wants to fetch, based on what it saw during ref discovery\&.
.sp
C: Start a queue, \fBc_pending\fR, ordered by commit time (popping newest first)\&. Add all client refs\&. When a commit is popped from the queue its parents SHOULD be automatically inserted back\&. Commits MUST only enter the queue once\&.
.sp
\fIone compute step:\fR
.sp
C: Send one \fB$GIT_URL/git\-upload\-pack\fR request:
.sp
.if n \{\
.RS 4
.\}
.nf
C: 0032want <want\-#1>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
C: 0032want <want\-#2>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
\&.\&.\&.\&.
C: 0032have <common\-#1>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
C: 0032have <common\-#2>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
\&.\&.\&.\&.
C: 0032have <have\-#1>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
C: 0032have <have\-#2>\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.
\&.\&.\&.\&.
C: 0000
.fi
.if n \{\
.RE
.\}
.sp
The stream is organized into "commands", with each command appearing by itself in a pkt\-line\&. Within a command line, the text leading up to the first space is the command name, and the remainder of the line to the first LF is the value\&. Command lines are terminated with an LF as the last byte of the pkt\-line value\&.
.sp
Commands MUST appear in the following order, if they appear at all in the request stream:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
"want"
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
"have"
.RE
.sp
The stream is terminated by a pkt\-line flush (\fB0000\fR)\&.
.sp
A single "want" or "have" command MUST have one hex formatted object name as its value\&. Multiple object names MUST be sent by sending multiple commands\&. Object names MUST be given using the object format negotiated through the \fBobject\-format\fR capability (default SHA\-1)\&.
.sp
The \fBhave\fR list is created by popping the first 32 commits from \fBc_pending\fR\&. Fewer can be supplied if \fBc_pending\fR empties\&.
.sp
If the client has sent 256 "have" commits and has not yet received one of those back from \fBs_common\fR, or the client has emptied \fBc_pending\fR it SHOULD include a "done" command to let the server know it won\(cqt proceed:
.sp
.if n \{\
.RS 4
.\}
.nf
C: 0009done
.fi
.if n \{\
.RE
.\}
.sp
S: Parse the git\-upload\-pack request:
.sp
Verify all objects in \fBwant\fR are directly reachable from refs\&.
.sp
The server MAY walk backwards through history or through the reflog to permit slightly stale requests\&.
.sp
If no "want" objects are received, send an error: TODO: Define error if no "want" lines are requested\&.
.sp
If any "want" object is not reachable, send an error: TODO: Define error if an invalid "want" is requested\&.
.sp
Create an empty list, \fBs_common\fR\&.
.sp
If "have" was sent:
.sp
Loop through the objects in the order supplied by the client\&.
.sp
For each object, if the server has the object reachable from a ref, add it to \fBs_common\fR\&. If a commit is added to \fBs_common\fR, do not add any ancestors, even if they also appear in \fBhave\fR\&.
.sp
S: Send the git\-upload\-pack response:
.sp
If the server has found a closed set of objects to pack or the request ends with "done", it replies with the pack\&. TODO: Document the pack based response
.sp
.if n \{\
.RS 4
.\}
.nf
S: PACK\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
The returned stream is the side\-band\-64k protocol supported by the git\-upload\-pack service, and the pack is embedded into stream 1\&. Progress messages from the server side MAY appear in stream 2\&.
.sp
Here a "closed set of objects" is defined to have at least one path from every "want" to at least one "common" object\&.
.sp
If the server needs more information, it replies with a status continue response: TODO: Document the non\-pack response
.sp
C: Parse the upload\-pack response: TODO: Document parsing response
.sp
\fIDo another compute step\&.\fR
.SH "SMART SERVICE GIT\-RECEIVE\-PACK"
.sp
This service reads from the repository pointed to by \fB$GIT_URL\fR\&.
.sp
Clients MUST first perform ref discovery with \fB$GIT_URL/info/refs\fR?service=git\-receive\-pack\&.
.sp
.if n \{\
.RS 4
.\}
.nf
C: POST $GIT_URL/git\-receive\-pack HTTP/1\&.0
C: Content\-Type: application/x\-git\-receive\-pack\-request
C:
C: \&.\&.\&.\&.0a53e9ddeaddad63ad106860237bbf53411d11a7 441b40d833fdfa93eb2908e52742248faf0ee993 refs/heads/maint\e0 report\-status
C: 0000
C: PACK\&.\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
S: 200 OK
S: Content\-Type: application/x\-git\-receive\-pack\-result
S: Cache\-Control: no\-cache
S:
S: \&.\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
Clients MUST NOT reuse or revalidate a cached response\&. Servers MUST include sufficient Cache\-Control headers to prevent caching of the response\&.
.sp
Servers SHOULD support all capabilities defined here\&.
.sp
Clients MUST send at least one command in the request body\&. Within the command portion of the request body clients SHOULD send the id obtained through ref discovery as old_id\&.
.sp
.if n \{\
.RS 4
.\}
.nf
update_request  =  command_list
     "PACK" <binary\-data>
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
command_list    =  PKT\-LINE(command NUL cap_list LF)
     *(command_pkt)
command_pkt     =  PKT\-LINE(command LF)
cap_list        =  *(SP capability) SP
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
command         =  create / delete / update
create          =  zero\-id SP new_id SP name
delete          =  old_id SP zero\-id SP name
update          =  old_id SP new_id SP name
.fi
.if n \{\
.RE
.\}
.sp
TODO: Document this further\&.
.SH "REFERENCES"
.sp
\m[blue]\fBRFC 1738: Uniform Resource Locators (URL)\fR\m[]\&\s-2\u[1]\d\s+2 \m[blue]\fBRFC 2616: Hypertext Transfer Protocol \(em HTTP/1\&.1\fR\m[]\&\s-2\u[2]\d\s+2
.SH "SEE ALSO"
.sp
\fBgitprotocol-pack\fR(5) \fBgitprotocol-capabilities\fR(5)
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
.SH "NOTES"
.IP " 1." 4
RFC 1738: Uniform Resource Locators (URL)
.RS 4
\%https://www.ietf.org/rfc/rfc1738.txt
.RE
.IP " 2." 4
RFC 2616: Hypertext Transfer Protocol \(em HTTP/1.1
.RS 4
\%https://www.ietf.org/rfc/rfc2616.txt
.RE
