如何在使用git-lfs进行克隆时发送http头以进行基本身份验证



大家好,我迁移了一个GitLab repo来开始使用GIT LFS。当你开始使用GIT LFS来克隆你的存储库时,你必须对你所做的每个请求(克隆、拉、推(使用HTTPS

在我的情况下,我们启用了双因素身份验证,这意味着我们需要在每次请求时发送用户名和PAT(个人访问令牌(。

因此,为了做到这一点,我是这样做的:

我得到base64身份验证头

$auth_basic = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("PlatinumDeployToken:asdasdLg9VVxBEzPp"))

然后我以这种方式发送克隆请求:

git lfs clone -c http.extraheader="AUTHORIZATION: basic $auth_basic" https://gitlab.inside.com/Platinum/TRXN_LFS.git "C:testheaders" --branch "PRODUCTION"

这样做的问题我得到了这个错误:

LFS:客户端错误:https://gitlab.inside.com/Platinum/TRXN_LFS.git/gitlab-lfs/objects/d2f34058e9c225e94164008735227d5a97b200507da79bb58a4e60e3b098707b

在尝试下载的每个二进制文件上。

当启用degug查看发生了什么

$env:GIT_TRACE=1
$env:GIT_TRANSFER_TRACE=1
$env:GIT_CURL_VERBOSE=1

我得到的回复是:

< HTTP/1.1 400 Bad Request
< Connection: close
< Content-Length: 150
< Content-Type: text/html
< Date: Wed, 10 Nov 2021 16:17:34 GMT
< Server: nginx
< Strict-Transport-Security: max-age=16070400; includeSubDomains
<
10:17:34.399534 trace git-lfs: xfer: adapter "basic" worker 0 finished job for "917a77065de94661f6997d8d301db30130033670b7d5d9c00a212904f393a00f"
10:17:34.400529 trace git-lfs: xfer: adapter "basic" worker 0 processing job for "6559abdbd7e5c21cef28c12f2b5a45b395c73fd55a03b05a5ce8b59cd749a0cd"
10:17:34.399534 trace git-lfs: tq: refusing to retry "917a77065de94661f6997d8d301db30130033670b7d5d9c00a212904f393a00f", too many retries (8)
10:17:34.400529 trace git-lfs: tq: refusing to retry "917a77065de94661f6997d8d301db30130033670b7d5d9c00a212904f393a00f", too many retries (8)
10:17:34.410502 trace git-lfs: HTTP: GET https://gitlab.inside.com/Platinum/TRXN_LFS.git/gitlab-lfs/objects/6559abdbd7e5c21cef28c12f2b5a45b395c73fd55a03b05a5ce8b59cd749a0cd
> GET /Platinum/TRXN_LFS.git/gitlab-lfs/objects/6559abdbd7e5c21cef28c12f2b5a45b395c73fd55a03b05a5ce8b59cd749a0cd HTTP/1.1
> Host: gitlab.inside.com
> Authorization: Basic * * * * *
> Authorization: Basic * * * * *
> User-Agent: git-lfs/2.13.2 (GitHub; windows amd64; go 1.14.13; git fc664697)
>
10:17:35.054339 trace git-lfs: HTTP: 400

它显示我得到了400响应,因为git-lfs发送了一个重复的身份验证头。

有人知道这样做是否正确吗?或者我该如何解决这个问题?

富豪。

使用Git LFS克隆存储库时,处理凭据的最佳方法是使用凭据助手。这是因为Git和GitLFS使用相同的机制来处理凭据。Git常见问题解答中有一个关于如何做到这一点的条目。虽然Git常见问题解答谈到了密码,但在这种情况下,您希望使用您的令牌而不是密码。

请注意,虽然在这种情况下可以使用http.extraheader,但不建议用于此目的,并且当您这样做时,系统中的每个人都可以看到您的凭据,这是不安全的。因此,你应该避免这样做

在您的特定情况下,您最终遇到了一个问题,因为您已经配置了一个凭据助手,它发送了另一个标头,或者作为Git LFS协议的一部分,您的Git LFS客户端被告知使用特定于该对象的不同令牌,并且两者都被发送了。这也是您应该在此处避免http.extraheader并只使用凭据助手的另一个原因。

最新更新