git-send-pack.1 (7217B)
- '\" t
- .\" Title: git-send-pack
- .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
- .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
- .\" Date: 2025-03-14
- .\" Manual: Git Manual
- .\" Source: Git 2.49.0
- .\" Language: English
- .\"
- .TH "GIT\-SEND\-PACK" "1" "2025-03-14" "Git 2\&.49\&.0" "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 [\-\-mirror] [\-\-dry\-run] [\-\-force]
- [\-\-receive\-pack=<git\-receive\-pack>]
- [\-\-verbose] [\-\-thin] [\-\-atomic]
- [\-\-[no\-]signed | \-\-signed=(true|false|if\-asked)]
- [<host>:]<directory> (\-\-all | <ref>\&...\:)
- .fi
- .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\&. This means 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\fR
- \fB\-\-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 the \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 patterns separated by a colon ":" (this means that a ref name cannot have a colon in it)\&. A single pattern \fI<name>\fR is just 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 ref\&.
- .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 \fB\-\-force\fR, 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 the "fast\-forward check", is performed to avoid accidentally overwriting the remote ref and losing other people\(cqs 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