Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
520
Documentation/gitremote-helpers.txt
Normal file
520
Documentation/gitremote-helpers.txt
Normal file
|
|
@ -0,0 +1,520 @@
|
|||
gitremote-helpers(7)
|
||||
====================
|
||||
|
||||
NAME
|
||||
----
|
||||
gitremote-helpers - Helper programs to interact with remote repositories
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git remote-<transport>' <repository> [<URL>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
||||
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's
|
||||
standard input, and expects results from the helper'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.
|
||||
|
||||
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.
|
||||
|
||||
Git comes with a "curl" family of remote helpers, that handle various
|
||||
transport protocols, such as 'git-remote-http', 'git-remote-https',
|
||||
'git-remote-ftp' and 'git-remote-ftps'. They implement the capabilities
|
||||
'fetch', 'option', and 'push'.
|
||||
|
||||
INVOCATION
|
||||
----------
|
||||
|
||||
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
|
||||
'<transport>://<address>', but any arbitrary string is possible.
|
||||
The `GIT_DIR` 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.
|
||||
|
||||
When Git encounters a URL of the form '<transport>://<address>', where
|
||||
'<transport>' is a protocol that it cannot handle natively, it
|
||||
automatically invokes 'git remote-<transport>' 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.
|
||||
|
||||
A URL of the form '<transport>::<address>' explicitly instructs Git to
|
||||
invoke 'git remote-<transport>' with '<address>' as the second
|
||||
argument. If such a URL is encountered directly on the command line,
|
||||
the first argument is '<address>', and if it is encountered in a
|
||||
configured remote, the first argument is the name of that remote.
|
||||
|
||||
Additionally, when a configured remote has `remote.<name>.vcs` set to
|
||||
'<transport>', Git explicitly invokes 'git remote-<transport>' with
|
||||
'<name>' as the first argument. If set, the second argument is
|
||||
`remote.<name>.url`; otherwise, the second argument is omitted.
|
||||
|
||||
INPUT FORMAT
|
||||
------------
|
||||
|
||||
Git sends the remote helper a list of commands on standard input, one
|
||||
per line. The first command is always the 'capabilities' 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.
|
||||
|
||||
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.
|
||||
|
||||
Capabilities
|
||||
~~~~~~~~~~~~
|
||||
|
||||
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 `capabilities` command (see COMMANDS, below).
|
||||
|
||||
In the following, we list all defined capabilities and for
|
||||
each we list which commands a helper with that capability
|
||||
must provide.
|
||||
|
||||
Capabilities for Pushing
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
'connect'::
|
||||
Can attempt to connect to 'git receive-pack' (for pushing),
|
||||
'git upload-pack', etc for communication using
|
||||
git's native packfile protocol. This
|
||||
requires a bidirectional, full-duplex connection.
|
||||
+
|
||||
Supported commands: 'connect'.
|
||||
|
||||
'stateless-connect'::
|
||||
Experimental; for internal use only.
|
||||
Can attempt to connect to a remote server for communication
|
||||
using git's wire-protocol version 2. See the documentation
|
||||
for the stateless-connect command for more information.
|
||||
+
|
||||
Supported commands: 'stateless-connect'.
|
||||
|
||||
'push'::
|
||||
Can discover remote refs and push local commits and the
|
||||
history leading up to them to new or existing remote refs.
|
||||
+
|
||||
Supported commands: 'list for-push', 'push'.
|
||||
|
||||
'export'::
|
||||
Can discover remote refs and push specified objects from a
|
||||
fast-import stream to remote refs.
|
||||
+
|
||||
Supported commands: 'list for-push', 'export'.
|
||||
|
||||
If a helper advertises 'connect', Git will use it if possible and
|
||||
fall back to another capability if the helper requests so when
|
||||
connecting (see the 'connect' command under COMMANDS).
|
||||
When choosing between 'push' and 'export', Git prefers 'push'.
|
||||
Other frontends may have some other order of preference.
|
||||
|
||||
'no-private-update'::
|
||||
When using the 'refspec' capability, git normally updates the
|
||||
private ref on successful push. This update is disabled when
|
||||
the remote-helper declares the capability 'no-private-update'.
|
||||
|
||||
|
||||
Capabilities for Fetching
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
'connect'::
|
||||
Can try to connect to 'git upload-pack' (for fetching),
|
||||
'git receive-pack', etc for communication using the
|
||||
Git's native packfile protocol. This
|
||||
requires a bidirectional, full-duplex connection.
|
||||
+
|
||||
Supported commands: 'connect'.
|
||||
|
||||
'stateless-connect'::
|
||||
Experimental; for internal use only.
|
||||
Can attempt to connect to a remote server for communication
|
||||
using git's wire-protocol version 2. See the documentation
|
||||
for the stateless-connect command for more information.
|
||||
+
|
||||
Supported commands: 'stateless-connect'.
|
||||
|
||||
'fetch'::
|
||||
Can discover remote refs and transfer objects reachable from
|
||||
them to the local object store.
|
||||
+
|
||||
Supported commands: 'list', 'fetch'.
|
||||
|
||||
'import'::
|
||||
Can discover remote refs and output objects reachable from
|
||||
them as a stream in fast-import format.
|
||||
+
|
||||
Supported commands: 'list', 'import'.
|
||||
|
||||
'check-connectivity'::
|
||||
Can guarantee that when a clone is requested, the received
|
||||
pack is self contained and is connected.
|
||||
|
||||
If a helper advertises 'connect', Git will use it if possible and
|
||||
fall back to another capability if the helper requests so when
|
||||
connecting (see the 'connect' command under COMMANDS).
|
||||
When choosing between 'fetch' and 'import', Git prefers 'fetch'.
|
||||
Other frontends may have some other order of preference.
|
||||
|
||||
Miscellaneous capabilities
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
'option'::
|
||||
For specifying settings like `verbosity` (how much output to
|
||||
write to stderr) and `depth` (how much history is wanted in the
|
||||
case of a shallow clone) that affect how other commands are
|
||||
carried out.
|
||||
|
||||
'refspec' <refspec>::
|
||||
For remote helpers that implement 'import' or 'export', 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 'import'
|
||||
capability use this. It's mandatory for 'export'.
|
||||
+
|
||||
A helper advertising the capability
|
||||
`refspec refs/heads/*:refs/svn/origin/branches/*`
|
||||
is saying that, when it is asked to `import refs/heads/topic`, the
|
||||
stream it outputs will update the `refs/svn/origin/branches/topic`
|
||||
ref.
|
||||
+
|
||||
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 'refspec' capability is advertised,
|
||||
there is an implied `refspec *:*`.
|
||||
+
|
||||
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.
|
||||
|
||||
'bidi-import'::
|
||||
This modifies the 'import' capability.
|
||||
The fast-import commands 'cat-blob' and 'ls' can be used by remote-helpers
|
||||
to retrieve information about blobs and trees that already exist in
|
||||
fast-import'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's stdin.
|
||||
It follows that Git and fast-import are both connected to the
|
||||
remote-helper's stdin. Because Git can send multiple commands to
|
||||
the remote-helper it is required that helpers that use 'bidi-import'
|
||||
buffer all 'import' commands of a batch before sending data to fast-import.
|
||||
This is to prevent mixing commands and fast-import responses on the
|
||||
helper's stdin.
|
||||
|
||||
'export-marks' <file>::
|
||||
This modifies the 'export' capability, instructing Git to dump the
|
||||
internal marks table to <file> when complete. For details,
|
||||
read up on `--export-marks=<file>` in linkgit:git-fast-export[1].
|
||||
|
||||
'import-marks' <file>::
|
||||
This modifies the 'export' capability, instructing Git to load the
|
||||
marks specified in <file> before processing any input. For details,
|
||||
read up on `--import-marks=<file>` in linkgit:git-fast-export[1].
|
||||
|
||||
'signed-tags'::
|
||||
This modifies the 'export' capability, instructing Git to pass
|
||||
`--signed-tags=verbatim` to linkgit:git-fast-export[1]. In the
|
||||
absence of this capability, Git will use `--signed-tags=warn-strip`.
|
||||
|
||||
|
||||
|
||||
COMMANDS
|
||||
--------
|
||||
|
||||
Commands are given by the caller on the helper's standard input, one per line.
|
||||
|
||||
'capabilities'::
|
||||
Lists the capabilities of the helper, one per line, ending
|
||||
with a blank line. Each capability may be preceded with '*',
|
||||
which marks them mandatory for Git versions using the remote
|
||||
helper to understand. Any unknown mandatory capability is a
|
||||
fatal error.
|
||||
+
|
||||
Support for this command is mandatory.
|
||||
|
||||
'list'::
|
||||
Lists the refs, one per line, in the format "<value> <name>
|
||||
[<attr> ...]". The value may be a hex sha1 hash, "@<dest>" 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.
|
||||
+
|
||||
See REF LIST ATTRIBUTES for a list of currently defined attributes.
|
||||
+
|
||||
Supported if the helper has the "fetch" or "import" capability.
|
||||
|
||||
'list for-push'::
|
||||
Similar to 'list', 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 'list'
|
||||
is going to be used, possibly reducing the amount
|
||||
of work that needs to be performed.
|
||||
+
|
||||
Supported if the helper has the "push" or "export" capability.
|
||||
|
||||
'option' <name> <value>::
|
||||
Sets the transport helper option <name> to <value>. Outputs a
|
||||
single line containing one of 'ok' (option successfully set),
|
||||
'unsupported' (option not recognized) or 'error <msg>'
|
||||
(option <name> is supported but <value> is not valid
|
||||
for it). Options should be set before other commands,
|
||||
and may influence the behavior of those commands.
|
||||
+
|
||||
See OPTIONS for a list of currently defined options.
|
||||
+
|
||||
Supported if the helper has the "option" capability.
|
||||
|
||||
'fetch' <sha1> <name>::
|
||||
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 'list' with a sha1 may be fetched this way.
|
||||
+
|
||||
Optionally may output a 'lock <file>' line indicating a file under
|
||||
GIT_DIR/objects/pack which is keeping a pack until refs can be
|
||||
suitably updated.
|
||||
+
|
||||
If option 'check-connectivity' is requested, the helper must output
|
||||
'connectivity-ok' if the clone is self-contained and connected.
|
||||
+
|
||||
Supported if the helper has the "fetch" capability.
|
||||
|
||||
'push' +<src>:<dst>::
|
||||
Pushes the given local <src> commit or branch to the
|
||||
remote branch described by <dst>. A batch sequence of
|
||||
one or more 'push' commands is terminated with a blank line
|
||||
(if there is only one reference to push, a single 'push' command
|
||||
is followed by a blank line). For example, the following would
|
||||
be two batches of 'push', the first asking the remote-helper
|
||||
to push the local ref 'master' to the remote ref 'master' and
|
||||
the local `HEAD` to the remote 'branch', and the second
|
||||
asking to push ref 'foo' to ref 'bar' (forced update requested
|
||||
by the '+').
|
||||
+
|
||||
------------
|
||||
push refs/heads/master:refs/heads/master
|
||||
push HEAD:refs/heads/branch
|
||||
\n
|
||||
push +refs/heads/foo:refs/heads/bar
|
||||
\n
|
||||
------------
|
||||
+
|
||||
Zero or more protocol options may be entered after the last 'push'
|
||||
command, before the batch's terminating blank line.
|
||||
+
|
||||
When the push is complete, outputs one or more 'ok <dst>' or
|
||||
'error <dst> <why>?' lines to indicate success or failure of
|
||||
each pushed ref. The status report output is terminated by
|
||||
a blank line. The option field <why> may be quoted in a C
|
||||
style string if it contains an LF.
|
||||
+
|
||||
Supported if the helper has the "push" capability.
|
||||
|
||||
'import' <name>::
|
||||
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.
|
||||
+
|
||||
Especially useful for interoperability with a foreign versioning
|
||||
system.
|
||||
+
|
||||
Just like 'push', a batch sequence of one or more 'import' is
|
||||
terminated with a blank line. For each batch of 'import', the remote
|
||||
helper should produce a fast-import stream terminated by a 'done'
|
||||
command.
|
||||
+
|
||||
Note that if the 'bidi-import' 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's
|
||||
stdin.
|
||||
+
|
||||
Supported if the helper has the "import" capability.
|
||||
|
||||
'export'::
|
||||
Instructs the remote helper that any subsequent input is
|
||||
part of a fast-import stream (generated by 'git fast-export')
|
||||
containing objects which should be pushed to the remote.
|
||||
+
|
||||
Especially useful for interoperability with a foreign versioning
|
||||
system.
|
||||
+
|
||||
The 'export-marks' and 'import-marks' capabilities, if specified,
|
||||
affect this command in so far as they are passed on to 'git
|
||||
fast-export', which then will load/store a table of marks for
|
||||
local objects. This can be used to implement for incremental
|
||||
operations.
|
||||
+
|
||||
Supported if the helper has the "export" capability.
|
||||
|
||||
'connect' <service>::
|
||||
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 'git-upload-pack'
|
||||
as service) on remote side. Valid replies to this command are
|
||||
empty line (connection established), 'fallback' (no smart
|
||||
transport support, fall back to dumb transports) and just
|
||||
exiting with error message printed (can't connect, don'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.
|
||||
+
|
||||
Supported if the helper has the "connect" capability.
|
||||
|
||||
'stateless-connect' <service>::
|
||||
Experimental; for internal use only.
|
||||
Connects to the given remote service for communication using
|
||||
git's wire-protocol version 2. Valid replies to this command
|
||||
are empty line (connection established), 'fallback' (no smart
|
||||
transport support, fall back to dumb transports) and just
|
||||
exiting with error message printed (can't connect, don'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.
|
||||
+
|
||||
Supported if the helper has the "stateless-connect" capability.
|
||||
|
||||
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.
|
||||
|
||||
Additional commands may be supported, as may be determined from
|
||||
capabilities reported by the helper.
|
||||
|
||||
REF LIST ATTRIBUTES
|
||||
-------------------
|
||||
|
||||
The 'list' 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.
|
||||
|
||||
'unchanged'::
|
||||
This ref is unchanged since the last import or fetch, although
|
||||
the helper cannot necessarily determine what value that produced.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
The following options are defined and (under suitable circumstances)
|
||||
set by Git if the remote helper has the 'option' capability.
|
||||
|
||||
'option verbosity' <n>::
|
||||
Changes the verbosity of messages displayed by the helper.
|
||||
A value of 0 for <n> means that processes operate
|
||||
quietly, and the helper produces only error output.
|
||||
1 is the default level of verbosity, and higher values
|
||||
of <n> correspond to the number of -v flags passed on the
|
||||
command line.
|
||||
|
||||
'option progress' {'true'|'false'}::
|
||||
Enables (or disables) progress messages displayed by the
|
||||
transport helper during a command.
|
||||
|
||||
'option depth' <depth>::
|
||||
Deepens the history of a shallow repository.
|
||||
|
||||
'option deepen-since <timestamp>::
|
||||
Deepens the history of a shallow repository based on time.
|
||||
|
||||
'option deepen-not <ref>::
|
||||
Deepens the history of a shallow repository excluding ref.
|
||||
Multiple options add up.
|
||||
|
||||
'option deepen-relative {'true'|'false'}::
|
||||
Deepens the history of a shallow repository relative to
|
||||
current boundary. Only valid when used with "option depth".
|
||||
|
||||
'option followtags' {'true'|'false'}::
|
||||
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.
|
||||
|
||||
'option dry-run' {'true'|'false'}:
|
||||
If true, pretend the operation completed successfully,
|
||||
but don't actually change any repository data. For most
|
||||
helpers this only applies to the 'push', if supported.
|
||||
|
||||
'option servpath <c-style-quoted-path>'::
|
||||
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.
|
||||
|
||||
'option check-connectivity' {'true'|'false'}::
|
||||
Request the helper to check connectivity of a clone.
|
||||
|
||||
'option force' {'true'|'false'}::
|
||||
Request the helper to perform a force update. Defaults to
|
||||
'false'.
|
||||
|
||||
'option cloning' {'true'|'false'}::
|
||||
Notify the helper this is a clone request (i.e. the current
|
||||
repository is guaranteed empty).
|
||||
|
||||
'option update-shallow' {'true'|'false'}::
|
||||
Allow to extend .git/shallow if the new refs require it.
|
||||
|
||||
'option pushcert' {'true'|'false'}::
|
||||
GPG sign pushes.
|
||||
|
||||
'option push-option <string>::
|
||||
Transmit <string> as a push option. As the push option
|
||||
must not contain LF or NUL characters, the string is not encoded.
|
||||
|
||||
'option from-promisor' {'true'|'false'}::
|
||||
Indicate that these objects are being fetched from a promisor.
|
||||
|
||||
'option no-dependents' {'true'|'false'}::
|
||||
Indicate that only the objects wanted need to be fetched, not
|
||||
their dependents.
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
linkgit:git-remote[1]
|
||||
|
||||
linkgit:git-remote-ext[1]
|
||||
|
||||
linkgit:git-remote-fd[1]
|
||||
|
||||
linkgit:git-fast-import[1]
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the linkgit:git[1] suite
|
||||
Loading…
Add table
Add a link
Reference in a new issue