mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Ævar Arnfjörð Bjarmason](/assets/img/avatar_default.png)
Continue the move of existing Documentation/technical/* protocol and file-format documentation into our main documentation space. By moving the things that discuss the protocol we can properly link from e.g. lsrefs.unborn and protocol.version documentation to a manpage we build by default. So far we have been using the "gitformat-" prefix for the documentation we've been moving over from Documentation/technical/*, but for protocol documentation let's use "gitprotocol-*". Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
51 lines
1.9 KiB
Plaintext
51 lines
1.9 KiB
Plaintext
Long-running process protocol
|
|
=============================
|
|
|
|
This protocol is used when Git needs to communicate with an external
|
|
process throughout the entire life of a single Git command. All
|
|
communication is in pkt-line format (see linkgit:gitprotocol-common[5])
|
|
over standard input and standard output.
|
|
|
|
Handshake
|
|
---------
|
|
|
|
Git starts by sending a welcome message (for example,
|
|
"git-filter-client"), a list of supported protocol version numbers, and
|
|
a flush packet. Git expects to read the welcome message with "server"
|
|
instead of "client" (for example, "git-filter-server"), exactly one
|
|
protocol version number from the previously sent list, and a flush
|
|
packet. All further communication will be based on the selected version.
|
|
The remaining protocol description below documents "version=2". Please
|
|
note that "version=42" in the example below does not exist and is only
|
|
there to illustrate how the protocol would look like with more than one
|
|
version.
|
|
|
|
After the version negotiation Git sends a list of all capabilities that
|
|
it supports and a flush packet. Git expects to read a list of desired
|
|
capabilities, which must be a subset of the supported capabilities list,
|
|
and a flush packet as response:
|
|
------------------------
|
|
packet: git> git-filter-client
|
|
packet: git> version=2
|
|
packet: git> version=42
|
|
packet: git> 0000
|
|
packet: git< git-filter-server
|
|
packet: git< version=2
|
|
packet: git< 0000
|
|
packet: git> capability=clean
|
|
packet: git> capability=smudge
|
|
packet: git> capability=not-yet-invented
|
|
packet: git> 0000
|
|
packet: git< capability=clean
|
|
packet: git< capability=smudge
|
|
packet: git< 0000
|
|
------------------------
|
|
|
|
Shutdown
|
|
--------
|
|
|
|
Git will close
|
|
the command pipe on exit. The filter is expected to detect EOF
|
|
and exit gracefully on its own. Git will wait until the filter
|
|
process has stopped.
|