git-send-pack(1)
================
-v0.1, July 2005
NAME
----
-git-send-pack - Push missing objects packed.
+git-send-pack - Push objects over git protocol to another repository
SYNOPSIS
--------
-'git-send-pack' [--exec=<git-receive-pack>] [<host>:]<directory> [<head>...]
+'git send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]
DESCRIPTION
-----------
+Usually you would want to use 'git-push', which is a
+higher-level wrapper of this command, instead. See linkgit:git-push[1].
+
Invokes 'git-receive-pack' on a possibly remote repository, and
-updates it from the current repository, sending named heads.
+updates it from the current repository, sending named refs.
OPTIONS
-------
---exec=<git-receive-pack>::
+--receive-pack=<git-receive-pack>::
Path to the 'git-receive-pack' program on the remote
end. Sometimes useful when pushing to a remote
repository over ssh, and you do not have the program in
a directory on the default $PATH.
+--exec=<git-receive-pack>::
+ Same as \--receive-pack=<git-receive-pack>.
+
+--all::
+ Instead of explicitly specifying which refs to update,
+ update all heads that locally exist.
+
+--dry-run::
+ Do everything except actually send the updates.
+
+--force::
+ Usually, the command refuses to update a remote ref that
+ is not an ancestor of the local ref used to overwrite it.
+ This flag disables the check. What this means is that
+ the remote repository can lose commits; use it with
+ care.
+
+--verbose::
+ Run verbosely.
+
+--thin::
+ Spend extra cycles to minimize the number of objects to be sent.
+ Use it on slower connection.
+
<host>::
A remote host to house the repository. When this
part is specified, 'git-receive-pack' is invoked via
<directory>::
The repository to update.
+<ref>...::
+ The remote refs to update.
+
+
+Specifying the Refs
+-------------------
+
+There are three ways to specify which refs to update on the
+remote end.
+
+With '--all' flag, all refs that exist locally are transferred to
+the remote side. You cannot specify any '<ref>' if you use
+this flag.
+
+Without '--all' and without any '<ref>', the heads that exist
+both on the local side and on the remote side are updated.
+
+When one or more '<ref>' are specified explicitly, it can be either a
+single pattern, or a pair of such pattern separated by a colon
+":" (this means that a ref name cannot have a colon in it). A
+single pattern '<name>' is just a shorthand for '<name>:<name>'.
+
+Each pattern pair consists of the source side (before the colon)
+and the destination side (after the colon). The ref to be
+pushed is determined by finding a match that matches the source
+side, and where it is pushed is determined by using the
+destination side. The rules used to match a ref are the same
+rules used by 'git-rev-parse' to resolve a symbolic ref
+name. See linkgit:git-rev-parse[1].
+
+ - It is an error if <src> does not match exactly one of the
+ local refs.
+
+ - It is an error if <dst> matches more than one remote refs.
+
+ - If <dst> does not match any remote ref, either
+
+ * it has to start with "refs/"; <dst> is used as the
+ destination literally in this case.
+
+ * <src> == <dst> and the ref that matched the <src> must not
+ exist in the set of remote refs; the ref matched <src>
+ locally is used as the name of the destination.
+
+Without '--force', the <src> ref is stored at the remote only if
+<dst> does not exist, or <dst> is a proper subset (i.e. an
+ancestor) of <src>. This check, known as "fast forward check",
+is performed in order to avoid accidentally overwriting the
+remote ref and lose other peoples' commits from there.
+
+With '--force', the fast forward check is disabled for all refs.
+
+Optionally, a <ref> parameter can be prefixed with a plus '+' sign
+to disable the fast-forward check only on that ref.
+
+
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
GIT
---
-Part of the link:git.html[git] suite
+Part of the linkgit:git[1] suite