## 名称

git-send-pack - 将对象通过 Git 协议推送到另一个存储库

## 概要

    git send-pack [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>]                [--verbose] [--thin] [--atomic]                [--[no-]signed|--sign=(true|false|if-asked)]                [<host>:]<directory> [<ref>…]

## 描述

通常你会想要使用`git push`这个命令的高级包装，而不是这个。见git-push [1]。

调用`git-receive-pack`可能是远程的存储库，并从当前的存储库更新它，发送名为 refs。

## 选项

--receive-pack=<git-receive-pack>

`git-receive-pack`远程端程序的路径。通过 ssh 推送到远程存储库时有用，而且您没有默认$ PATH 目录中的程序。

--exec=<git-receive-pack>

与--receive-pack = <git-receive-pack>相同。

--all

而不是明确指定要更新哪些参考，更新所有本地存在的头。

--stdin

从 stdin 中获取参考列表，每行一个。如果除了此选项外，还在命令行中指定了引用，则 stdin 中的引用将在命令行中的引用之后进行处理。

如果`--stateless-rpc`与此选项一起指定，则参考列表必须采用数据包格式（pkt-line）。每个 ref 必须位于一个单独的数据包中，并且该列表必须以 flush 数据包结尾。

--dry-run

除了实际发送更新之外，请做其他事

--force

通常，该命令拒绝更新远程 ref，该远程 ref 不是用于覆盖它的本地 ref 的祖先。此标志禁用检查。这意味着远程仓库可能会失去提交； 小心使用它。

--verbose

详细地运行。

--thin

发送一个“精简”包，该包根据包中未包含的对象以分辨形式记录对象，以减少网络流量。

--atomic

使用原子事务来更新参考。如果任何一个 ref 没有更新，那么整个 push 将会失败而不改变任何 refs。

--no-signed --sign=(true|false|if-asked)

GPG-信号 推送请求以更新接收端的 refs，以便通过钩子检查和/或记录。如果`false`或者`--no-signed`，不会尝试签名。如果`true`或者`--signed`，如果服务器不支持签名推送，推送将失败。如果设置为`if-asked`，则当且仅当服务器支持签名推送时签名。如果实际的调用`gpg --sign`失败，推送也会失败。有关接收端的详细信息，请参阅 git-receive-pack [1]。

--push-option=<string>

将指定的字符串作为推送选项传递给服务器端的挂钩使用。如果服务器不支持推送选项，则出错。有关详细信息，请参阅 git-push [1]和 githooks [5]。

<host>

一个远程主机来存放版本库。当这部分被指定时，通过ssh调用`git-receive-pack`。

<directory>

要更新的存储库。

<ref>…

远程参考更新。

## 指定参考

有三种方法可以指定在远程端更新哪些参考。

使用`--all`标志，本地存在的所有参考将转移到远程方。如果您使用此标志，则不能指定任何`<ref>`内容。

如果没有`--all`和没有`<ref>`，本地和远端存在的头都会更新。

当明确指定一个或多个`<ref>`（无论是在命令行还是通过`--stdin`）时，它可以是单个模式，也可以是由冒号“：”分隔的一对这样的模式（这意味着 ref 名称不能包含冒号它）。一个模式`<name>`只是一个`<name>:<name>`简写。

每个模式对由源端（冒号前）和目标端（冒号后）组成。要推送的引用是通过找到匹配源端的匹配来确定的，并且推送的位置由目标端确定。用于匹配 ref 的规则与用于`git rev-parse`解析符号 ref 名称的规则相同。参见 git-rev-parse [1]。

- 如果<src>不完全匹配一个本地引用，那是错误的。

- 如果<dst>匹配多个远程引用，那是错误的。

- 如果<dst>与任何远程参考不匹配

    -  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.

如果没有`--force`，<src> ref仅在<dst>不存在的情况下存储在远程，或者<dst>是<src>的真子集（即祖先）。此检查称为“快进检查”，以避免意外覆盖远程参考并丢失其他人的提交。

与此同时`--force`，所有裁判都禁用快进检查。

可选地，一个<ref>参数可以带有加`+`号前缀以禁用仅在该 ref 上的快进检查。