Git
简体中文 ▾Topics ▾Latest version ▾ git-upload-pack last updated in 2.45.1

名称

git-upload-pack - 将打包的对象发送回 git-fetch-pack

概述

git-upload-pack [--[no-]strict] [--timeout=<n>] [--stateless-rpc]
		  [--advertise-refs] <目录>

描述

git fetch-pack 调用,了解对方缺少哪些对象,并在打包后发送。

终端用户通常不会直接调用该命令。 该协议的用户界面在 git fetch-pack 端,程序对用于从远程仓库拉取更新。 关于推送操作,请参阅 git send-pack

选项

--[no-]strict

如果 <目录> 不是 Git 目录,请不要尝试 <目录>/.git/ 。

--timeout=<n>

<n> 秒不活动后中断传输。

--stateless-rpc

只对标准输入和标准输出执行一次读写循环。 这符合 HTTP POST 请求处理模式,即程序可以读取请求、写入响应,然后必须退出。

--http-backend-info-refs

git-http-backend[1] 使用,用于提供 $GIT_URL/info/refs?service=git-upload-pack 请求。参见 gitprotocol-http[5] 中的 “智能客户端” 和 gitprotocol-v2[5] 文档中的 “HTTP 传输”。也可理解为 git-receive-pack[1]

<目录>

要同步的仓库。

环境变量

GIT_PROTOCOL

用于与传输协议握手的内部变量。服务器管理员可能需要配置某些传输协议,以允许传递此变量。请参阅 git[1] 中的讨论。

GIT_NO_LAZY_FETCH

当从部分仓库(即本身使用 --filter 克隆的仓库)克隆或提取时,服务器端的 upload-pack 可能需要从其上游获取额外的对象以完成请求。默认情况下,upload-pack 将拒绝执行此类延迟获取,因为 git fetch 可能会运行源仓库配置和钩子中指定的任意命令(并且 upload-pack 尝试即使在不受信任的 .git 目录中也能安全运行)。

这是通过让 upload-pack 在内部将 GIT_NO_LAZY_FETCH 变量设置为 1 来实现的。如果您想覆盖它(因为您正在从部分克隆中提取,并且您确信您信任它),您可以显式地将 GIT_NO_LAZY_FETCH 设置为 0

安全

大多数 Git 命令不应在不受信任的 .git 目录中运行(参见 git[1] 中的 SECURITY 部分)。upload-pack 尝试避免来自其服务的仓库的任何危险配置选项或钩子,这使得克隆不受信任的目录并在结果克隆上运行命令是安全的。

为了额外的安全级别,您可能能够以备用用户身份运行 upload-pack。具体细节将取决于平台,但在许多系统上,您可以运行:

git clone --no-local --upload-pack='sudo -u nobody git-upload-pack' ...

GIT

属于 git[1] 文档

scroll-to-top