设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
2.52.0
2025-11-17
- 2.43.1 → 2.51.2 无更改
-
2.43.0
2023-11-20
- 2.39.1 → 2.42.4 无更改
-
2.39.0
2022-12-12
- 2.34.1 → 2.38.5 无更改
-
2.34.0
2021-11-15
- 2.18.1 → 2.33.8 无更改
-
2.18.0
2018-06-21
- 2.16.6 → 2.17.6 无更改
-
2.15.4
2019-12-06
- 2.14.6 无更改
-
2.13.7
2018-05-22
- 2.10.5 → 2.12.5 无更改
-
2.9.5
2017-07-30
- 2.7.6 → 2.8.6 无更改
-
2.6.7
2017-05-05
- 2.5.6 无更改
-
2.4.12
2017-05-05
- 2.2.3 → 2.3.10 无更改
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
git send-pack [--mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [--[no-]signed | --signed=(true|false|if-asked)] [<host>:]<directory> (--all | <ref>…)
描述
通常,您应该使用 git push,它是这个命令的一个更高级别的包装器。请参见 git-push[1]。
在可能的远程仓库上调用 git-receive-pack,并从当前仓库更新它,发送命名的引用。
选项
- --receive-pack=<git-receive-pack>
-
远程端 git-receive-pack 程序的路径。在通过 ssh 推送到远程仓库时,如果您在默认 $PATH 的目录中没有该程序,有时会很有用。
- --exec=<git-receive-pack>
-
与 --receive-pack=<git-receive-pack> 相同。
- --all
-
而不是显式指定要更新的引用,更新本地存在的所有 heads。
- --stdin
-
从 stdin 读取引用的列表,每行一个。如果除了此选项外,在命令行中还指定了其他引用,则在命令行中的引用处理完毕后,再处理来自 stdin 的引用。
如果指定了
--stateless-rpc和此选项,则引用的列表必须采用包格式 (pkt-line)。每个引用必须在单独的包中,并且列表必须以刷新包结束。 - --dry-run
-
执行所有操作,但实际上不发送更新。
- --force
-
通常,命令会拒绝更新远程引用,如果该远程引用不是用于覆盖它的本地引用的祖先。此标志禁用此检查。这意味着远程仓库可能会丢失提交;请谨慎使用。
- --verbose
-
运行详细模式。
- --thin
-
发送一个“thin”包,它根据包中未包含的对象以增量形式记录对象,以减少网络流量。
- --atomic
-
使用原子事务更新引用。如果任何引用更新失败,则整个推送将失败,而不会更改任何引用。
- --signed
- --no-signed
- --signed=(true|false|if-asked)
-
GPG 对推送请求进行签名以更新接收端的引用,以便钩子可以进行检查和/或记录。如果为
false或--no-signed,则不尝试签名。如果为true或--signed,如果服务器不支持签名推送,则推送将失败。如果设置为if-asked,则仅当服务器支持签名推送时才进行签名。如果实际调用gpg--sign失败,推送也会失败。有关接收端的详细信息,请参见 git-receive-pack[1]。 - --push-option=<string>
-
将指定的字符串作为推送选项传递,供服务器端的钩子使用。如果服务器不支持推送选项,则会报错。有关详细信息,请参见 git-push[1] 和 githooks[5]。
- <host>
-
存储仓库的远程主机。指定此部分时,git-receive-pack 将通过 ssh 调用。
- <directory>
-
要更新的仓库。
- <ref>…
-
要更新的远程引用。
指定引用
有三种方法可以指定要更新的远程引用。
使用 --all 标志,本地存在的所有引用都将传输到远程端。如果使用此标志,则不能指定任何 <ref>。
不使用 --all 且不使用任何 <ref> 时,将更新同时存在于本地和远程的 heads。
当显式指定一个或多个 <ref> (无论是在命令行还是通过 --stdin) 时,它可以是单个模式,也可以是用冒号 ":" 分隔的模式对 (这意味着引用名不能包含冒号)。单个模式 <name> 只是 <name>:<name> 的简写。
每个模式对由源端 (冒号之前) 和目标端 (冒号之后) 组成。要推送的引用是通过查找匹配源端的匹配项来确定的,而推送目标则由目标端确定。用于匹配引用的规则与 git rev-parse 解析符号引用名所使用的规则相同。请参见 git-rev-parse[1]。
-
如果 <src> 没有精确匹配本地引用之一,则为错误。
-
如果 <dst> 匹配多个远程引用,则为错误。
-
如果 <dst> 没有匹配任何远程引用,则:
-
它必须以 "refs/" 开头;在这种情况下,<dst> 被用作字面上的目标。
-
<src> == <dst> 并且匹配 <src> 的引用必须不存在于远程引用集中;匹配 <src> 的本地引用被用作目标名称。
-
如果不使用 --force,则仅当 <dst> 不存在,或者 <dst> 是 <src> 的真子集 (即祖先) 时,才会将 <src> 引用存储在远程。此检查称为“快进检查”,用于避免意外覆盖远程引用并丢失他人的提交。
使用 --force 时,将为所有引用禁用快进检查。
可选地,可以使用加号 + 前缀来表示 <ref> 参数,以仅对该引用禁用快进检查。