| '\" t |
| .\" Title: git-send-pack |
| .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] |
| .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> |
| .\" Date: 02/19/2019 |
| .\" Manual: Git Manual |
| .\" Source: Git 2.21.0.rc2 |
| .\" Language: English |
| .\" |
| .TH "GIT\-SEND\-PACK" "1" "02/19/2019" "Git 2\&.21\&.0\&.rc2" "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" |
| git-send-pack \- Push objects over Git protocol to another repository |
| .SH "SYNOPSIS" |
| .sp |
| .nf |
| \fIgit send\-pack\fR [\-\-all] [\-\-dry\-run] [\-\-force] [\-\-receive\-pack=<git\-receive\-pack>] |
| [\-\-verbose] [\-\-thin] [\-\-atomic] |
| [\-\-[no\-]signed|\-\-signed=(true|false|if\-asked)] |
| [<host>:]<directory> [<ref>\&...] |
| .fi |
| .sp |
| .SH "DESCRIPTION" |
| .sp |
| Usually you would want to use \fIgit push\fR, which is a higher\-level wrapper of this command, instead\&. See \fBgit-push\fR(1)\&. |
| .sp |
| Invokes \fIgit\-receive\-pack\fR on a possibly remote repository, and updates it from the current repository, sending named refs\&. |
| .SH "OPTIONS" |
| .PP |
| \-\-receive\-pack=<git\-receive\-pack> |
| .RS 4 |
| Path to the |
| \fIgit\-receive\-pack\fR |
| 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\&. |
| .RE |
| .PP |
| \-\-exec=<git\-receive\-pack> |
| .RS 4 |
| Same as \-\-receive\-pack=<git\-receive\-pack>\&. |
| .RE |
| .PP |
| \-\-all |
| .RS 4 |
| Instead of explicitly specifying which refs to update, update all heads that locally exist\&. |
| .RE |
| .PP |
| \-\-stdin |
| .RS 4 |
| Take the list of refs from stdin, one per line\&. If there are refs specified on the command line in addition to this option, then the refs from stdin are processed after those on the command line\&. |
| .sp |
| If |
| \fB\-\-stateless\-rpc\fR |
| is specified together with this option then the list of refs must be in packet format (pkt\-line)\&. Each ref must be in a separate packet, and the list must end with a flush packet\&. |
| .RE |
| .PP |
| \-\-dry\-run |
| .RS 4 |
| Do everything except actually send the updates\&. |
| .RE |
| .PP |
| \-\-force |
| .RS 4 |
| 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\&. |
| .RE |
| .PP |
| \-\-verbose |
| .RS 4 |
| Run verbosely\&. |
| .RE |
| .PP |
| \-\-thin |
| .RS 4 |
| Send a "thin" pack, which records objects in deltified form based on objects not included in the pack to reduce network traffic\&. |
| .RE |
| .PP |
| \-\-atomic |
| .RS 4 |
| Use an atomic transaction for updating the refs\&. If any of the refs fails to update then the entire push will fail without changing any refs\&. |
| .RE |
| .PP |
| \-\-[no\-]signed, \-\-signed=(true|false|if\-asked) |
| .RS 4 |
| GPG\-sign the push request to update refs on the receiving side, to allow it to be checked by the hooks and/or be logged\&. If |
| \fBfalse\fR |
| or |
| \fB\-\-no\-signed\fR, no signing will be attempted\&. If |
| \fBtrue\fR |
| or |
| \fB\-\-signed\fR, the push will fail if the server does not support signed pushes\&. If set to |
| \fBif\-asked\fR, sign if and only if the server supports signed pushes\&. The push will also fail if the actual call to |
| \fBgpg \-\-sign\fR |
| fails\&. See |
| \fBgit-receive-pack\fR(1) |
| for the details on the receiving end\&. |
| .RE |
| .PP |
| \-\-push\-option=<string> |
| .RS 4 |
| Pass the specified string as a push option for consumption by hooks on the server side\&. If the server doesn\(cqt support push options, error out\&. See |
| \fBgit-push\fR(1) |
| and |
| \fBgithooks\fR(5) |
| for details\&. |
| .RE |
| .PP |
| <host> |
| .RS 4 |
| A remote host to house the repository\&. When this part is specified, |
| \fIgit\-receive\-pack\fR |
| is invoked via ssh\&. |
| .RE |
| .PP |
| <directory> |
| .RS 4 |
| The repository to update\&. |
| .RE |
| .PP |
| <ref>\&... |
| .RS 4 |
| The remote refs to update\&. |
| .RE |
| .SH "SPECIFYING THE REFS" |
| .sp |
| There are three ways to specify which refs to update on the remote end\&. |
| .sp |
| With \fB\-\-all\fR flag, all refs that exist locally are transferred to the remote side\&. You cannot specify any \fI<ref>\fR if you use this flag\&. |
| .sp |
| Without \fB\-\-all\fR and without any \fI<ref>\fR, the heads that exist both on the local side and on the remote side are updated\&. |
| .sp |
| When one or more \fI<ref>\fR are specified explicitly (whether on the command line or via \fB\-\-stdin\fR), 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 \fI<name>\fR is just a shorthand for \fI<name>:<name>\fR\&. |
| .sp |
| 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 \fIgit rev\-parse\fR to resolve a symbolic ref name\&. See \fBgit-rev-parse\fR(1)\&. |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| It is an error if <src> does not match exactly one of the local refs\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| It is an error if <dst> matches more than one remote refs\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| If <dst> does not match any remote ref, either |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| it has to start with "refs/"; <dst> is used as the destination literally in this case\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| <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\&. |
| .RE |
| .RE |
| .sp |
| Without \(oq\-\-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\(cq commits from there\&. |
| .sp |
| With \fB\-\-force\fR, the fast\-forward check is disabled for all refs\&. |
| .sp |
| Optionally, a <ref> parameter can be prefixed with a plus \fI+\fR sign to disable the fast\-forward check only on that ref\&. |
| .SH "GIT" |
| .sp |
| Part of the \fBgit\fR(1) suite |