git-remote-helpers(1)
=====================

NAME
----
git-remote-helpers - Helper programs for interoperation with remote git

SYNOPSIS
--------
'git remote-<transport>' <remote>

DESCRIPTION
-----------

These programs are normally not used directly by end users, but are
invoked by various git programs that interact with remote repositories
when the repository they would operate on will be accessed using
transport code not linked into the main git binary. Various particular
helper programs will behave as documented here.

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 '*'.
	This marks them mandatory for git version using the remote
	helper to understand (unknown mandatory capability is fatal
	error).

'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. After the
	complete list, outputs a blank line.
+
If 'push' is supported this may be called as 'list for-push'
to obtain the current refs prior to sending one or more 'push'
commands to the helper.

'option' <name> <value>::
	Set 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 correct
	for it).  Options should be set before other commands,
	and may how those commands behave.
+
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, and the batch is 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 ref 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.
+
Supported if the helper has the "fetch" capability.

'push' +<src>:<dst>::
	Pushes the given <src> commit or branch locally to the
	remote branch described by <dst>.  A batch sequence of
	one or more push commands is terminated with a blank line.
+
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.
+
Supported if the helper has the "import" 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.

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.

CAPABILITIES
------------

'fetch'::
	This helper supports the 'fetch' command.

'option'::
	This helper supports the option command.

'push'::
	This helper supports the 'push' command.

'import'::
	This helper supports the 'import' command.

'refspec' 'spec'::
	When using the import command, expect the source ref to have
	been written to the destination ref. The earliest applicable
	refspec takes precedence. For example
	"refs/heads/*:refs/svn/origin/branches/*" means that, after an
	"import refs/heads/name", the script has written to
	refs/svn/origin/branches/name. If this capability is used at
	all, it must cover all refs reported by the list command; if
	it is not used, it is effectively "*:*"

'connect'::
	This helper supports the 'connect' command.

REF LIST ATTRIBUTES
-------------------

'for-push'::
	The caller wants to use the ref list to prepare push
	commands.  A helper might chose to acquire the ref list by
	opening a different type of connection to the destination.

'unchanged'::
	This ref is unchanged since the last import or fetch, although
	the helper cannot necessarily determine what value that produced.

OPTIONS
-------
'option verbosity' <N>::
	Change the level of messages displayed by the helper.
	When N is 0 the end-user has asked the process to be
	quiet, and the helper should produce only error output.
	N of 1 is the default level of verbosity, higher values
	of N correspond to the number of -v flags passed on the
	command line.

'option progress' \{'true'|'false'\}::
	Enable (or disable) progress messages displayed by the
	transport helper during a command.

'option depth' <depth>::
	Deepen the history of a shallow repository.

'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>'::
	Set service path (--upload-pack, --receive-pack etc.) for
	next connect. Remote helper MAY support this option. Remote
	helper MUST NOT rely on this option being set before
	connect request occurs.

Documentation
-------------
Documentation by Daniel Barkalow and Ilari Liusvaara

GIT
---
Part of the linkgit:git[1] suite
