使用部署令牌时如何在没有默认身份的情况下进行 git pull?

Posted

技术标签:

【中文标题】使用部署令牌时如何在没有默认身份的情况下进行 git pull?【英文标题】:How to git pull with no default identity when using a deploy token? 【发布时间】:2022-01-15 13:53:37 【问题描述】:

我有一个 Gitlab 存储库,它有一个非常大的主分支。我只想在 repo 中使用一个文件夹,所以我创建了一个分支并删除了我想要使用的文件夹以外的所有内容。然后,我使用部署令牌(具有完全权限)和分支标志克隆了分支以指定分支:

git clone --branch my_branch https://oauth2:[MY_TOKEN]@gitlab.com/my-repo.git ./save_location

这很好,我完全没有克隆 repo 的问题。如果我想获取推送到 master 分支的文件夹的任何更新,我可以将 master 拉到我的分支中,并设置 -X theirs 标志。我检查了 git 文档,当使用分支标志集进行克隆时,repo 仍然跟踪所有其他分支,所以这个 pull 仍然按预期工作。所以这里是命令:

git pull origin master -s recursive -X theirs

这似乎很简单,但尝试拉取会出现此错误:

 * branch            master     -> FETCH_HEAD
Committer identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.

如果我使用部署令牌来访问存储库,并且令牌具有完全权限,那么为什么仍然要求我提供身份?如何在不配置身份的情况下解决此问题?我想确保这是一个完全不露面的系统,不依赖于帐户。

【问题讨论】:

Committer identity unknown 你使用公共 gitlab 还是私有实例?如果是后者,您应该联系管理员... @KamilCuk 私有实例。我可以联系管理员,但我想我知道可能是什么解决方案。可能只需要配置一个电子邮件和名称,以便 git 至少可以跟踪提交的一些来源...... 【参考方案1】:

您收到的提示是因为您正在进行合并提交,而 Git 需要提交者身份才能放入提交中。 user.name 是个人姓名,而不是用户名,user.email 是电子邮件。这些与您在 GitLab 上的帐户无关,与身份验证无关,并且纯粹在本地设置,但为了创建提交,您必须设置它们(或使用不同的方法指定它们,例如环境变量)。

如果您不创建提交,您可以在不设置作者或提交者身份的情况下工作,但如果您创建提交,则必须指定一些内容。如果您喜欢使用无效的电子邮件地址(例如,nobody@example.com),您可以指定机器帐户。如果这是一个脚本并且您不想依赖更改本地配置,则可以使用环境变量 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL 及其提交者对应项来指定环境中的值。 git commit manual page 解释了这些变量及其用途。

【讨论】:

也感谢您的文档参考,很好的答案!

以上是关于使用部署令牌时如何在没有默认身份的情况下进行 git pull?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 8:如何在没有刷新令牌的情况下刷新令牌

如何在没有身份验证的情况下创建 JWT 令牌

从令牌创建 Django 会话

如何在没有 Microsoft 身份的情况下对 blazor 服务器进行 jwt 身份验证?

如何在 identityserver4 中没有用户名和密码的情况下从令牌端点获取令牌?

如何在没有身份验证的情况下添加 Firebase 数据库规则?