git send-pack

优质
小牛编辑
124浏览
2023-12-01

名称

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 上的快进检查。