跳转到内容
搜索文档

Git 协议

最后更新 查看 MarkdownAgent 设置

Artifacts 为每个 Artifacts 存储库提供 Git 访问权限。

每个存储库都具有一个标准的 Git 智能 HTTP 远程端,地址为 https://<ACCOUNT_ID>.artifacts.cloudflare.net/git/<namespace>/<repo>.git

<ACCOUNT_ID> 占位符替换为您的 Cloudflare 账户 ID。请使用 Workers 绑定(binding)或 REST API 返回的存储库 remote 中的确切主机名。

将返回的存储库 remote 与常规 Git 客户端一起用于 clonefetchpullpush

身份验证

Git 路由接受以下两种形式的存储库访问令牌:

格式 详情 示例
http.extraHeader 中的 Bearer 令牌 推荐用于本地工作流。使用控制平面返回的完整令牌字符串,并使凭证保持在远程 URL 之外。 git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone
远程 URL 中的 HTTP Basic 身份验证 在需要包含身份验证信息的完整远程端运行短期、一次性命令时使用。将令牌密钥(token secret)填入密码栏。 https://x:<token-secret>@<ACCOUNT_ID>.artifacts.cloudflare.net/git/<namespace>/<repo>.git

令牌格式

存储库令牌的格式为 art_v1_<40 hex>?expires=<unix_seconds>?expires= 后缀是 Unix 时间戳形式的令牌过期秒数。要检查令牌何时过期,请解析 ?expires= 之后的值。

Git extraHeader 参数

Git 的 http.extraHeader 设置允许您向 git 请求附加 HTTP 标头。

如果您想使用 API 返回的完整令牌字符串,请将其作为 Bearer 令牌传递:

git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone

带有 Basic 身份验证的 HTTPS 远程端

对于 URL 形式,在密码栏中使用令牌密钥。Artifacts 会忽略 Basic 身份验证用户名。

仅在运行短期命令时需要包含身份验证信息的完整远程 URL 时才使用此形式。

export ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
export ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"
git clone "$ARTIFACTS_AUTH_REMOTE" artifacts-clone
git push "$ARTIFACTS_AUTH_REMOTE" HEAD:main

在 URL 中使用任何非空用户名。Artifacts 接受该用户名,但不会在其他地方使用或记录它,因此 x 只是一个占位符。

协议支持

Artifacts 在克隆(clone)和拉取(fetch)中支持 Git 协议 v1 和 v2。Git 客户端会自动协商协议。

操作 Git 服务 协议支持 说明
克隆和拉取(Clone and fetch) git-upload-pack v1 和 v2 协议 v2 支持 ls-refsfetch。协议 v1 支持正常的拉取流,包括浅克隆(shallow)和深度克隆(deepen)拉取。
推送(Push) git-receive-pack v1 推送使用标准的 v1 receive-pack 流。
基于协议 v2 的推送 git-receive-pack 不支持 Artifacts 不支持 v2 receive-pack。
可选的协议 v1 功能 git-upload-pack 部分支持 部分可选的 v1 功能(例如 filterinclude-tag)不受支持。

令牌范围

范围 命令 说明
read git clone, git fetch, git pull 用于只读访问。
write git clone, git fetch, git pull, git push git push 会修改存储库,需要写入令牌。

这篇文档对您有帮助吗?